---
sidebar_position: 2
---

# Часть 1. Подготовка виртуальной машины

:::info
Процесс развертывания виртуальной машины показан на VirtualBox 7.0, установленный на хостовую машину с операционной системой Manjaro (Linux).
:::

## Установка операционной системы виртуальной машины

1. Устанавливаем [VirtualBox](https://www.virtualbox.org/).
2. Скачиваем образ для установки дистрибутива Ubuntu Server 22.04 с [официального сайта](https://releases.ubuntu.com/22.04/). Вы можете выбрать любой способ загрузки, подходящий вам, например через Torrent клиент.

   :::info
   Во время подготовки материала использовался образ `ubuntu-22.04.3-live-server-amd64.iso`, как наиболее универсальный вариант.
   ::::

3. Пока качается образ - создаем виртуальную машину (далее ВМ) в системе виртуализации. Ставить будем в VirtualBox (далее VB)

   Открываем окно создания виртуальной машины:
  
   ![create-vm-1](./images/create-vm-1.png)

   Как назвать - дело ваше. Удобно набрать "ubuntu" в названии, тогда VB сразу подставит значения для Ubuntu в выпадающие списки.

   Важно указать, что мы хотим пропустить автоматическую установку:

   ![create-vm-2](./images/create-vm-2.png)

   Для виртуальной машины рекомендуется задать оперативную память 4096 МБ. На странице официальной странице дистрибутива указано, что минимальным требование является 1024 МБ. Этот параметр вы можете изменить в будущем в настройках виртуальной машины:

   ![create-vm-3](./images/create-vm-3.png)

   Выделяем диск. Использовать рекомендуется динамический виртуальный диск. Тогда покуда внутри ВМ вы не забьете место на диске - оно не будет занято и в вашей хостовой системе. Фактический размер будет динамически растягиваться под требования (но автоматически сжиматься не будет). Достаточно будет и 25 GiB. Лучше сразу больше, все равно место оно не занимает, пока не потребуется:

   ![create-vm-4](./images/create-vm-4.png)

   После того, как задали все параметры, нажимаем "Готово".
  
4. Идем в настройки VirtualBox и создаем новую сеть NAT. Настраиваем проброс портов `127.0.0.1:2222 -> 10.0.5.5:22`. Это нам потребуется для того, чтобы мы могли по SSH подключиться к виртуальной машине из хостовой.

   ![create-net-1](./images/create-net-1.png)

   Переходим к созданию новой сети NAT:

   ![create-net-2](./images/create-net-2.png)

   Указываем, что хотим создать подсеть `10.0.5.0/24`:

   ![create-net-3](./images/create-net-3.png)

   Далее делаем проброс портов `127.0.0.1:2222 -> 10.0.5.5:22`:

   ![create-net-4](./images/create-net-4.png)

   После того, как все указали, применяем настройки сети и проброса портов.

5. В настройках ВМ в системе виртуализации выбираем загруженный образ в качестве содержимого оптического носителя, чтобы с него загрузиться:
  
   ![create-choose-cd-1](./images/create-choose-cd-1.png)

   ![create-choose-cd-2](./images/create-choose-cd-2.png)

6. В настройках ВМ в пункте "Сеть" выбираем "Сеть NAT" и нашу новую сеть:

   ![create-choose-net-1](./images/create-choose-net-1.png)

   Незабываем подтвердить внесенные изменения в виртуальную машину.

7. Запускаем виртуальную машину и устанавливаем систему. Подробно рассматривать процесс установки не будем, остановимся только на самых важных деталях. Руководство по установке [Ubuntu Server](https://ubuntu.com/tutorials/install-ubuntu-server#1-overview).

   Выбираем пункт `Try or Install Ubuntu Server`:

   ![install-ubuntu-1](./images/install-ubuntu-1.png)

   Выбор региона и раскладки клавиатуры. Если выбираете себе что-то, кроме английской раскладки - дело ваше, страдать Вам. Мы оставим все все по умолчанию:

   ![install-ubuntu-2](./images/install-ubuntu-2.png)

   ![install-ubuntu-3](./images/install-ubuntu-3.png)

   Оставим также по умолчанию то, что хотим устанавливать:

   ![install-ubuntu-4](./images/install-ubuntu-4.png)

   Далее настройки сетевого интерфейса. Оставляем по умолчанию:

   ![install-ubuntu-5](./images/install-ubuntu-5.png)

   Proxy - пропускаем, оставляем пустым:

   ![install-ubuntu-6](./images/install-ubuntu-6.jpg)

   Какое зеркало для загрузки репозиториев использовать - выбираем `ru.archive.ubuntu.com` - зеркало Yandex:

   ![install-ubuntu-7](./images/install-ubuntu-7.jpg)

   Настройки разметки диска. Оставляем все по умолчанию - система автоматически поставится поверх LVM. Для реальных систем идут жаркие споры о том стоит или не стоит ставить систему на LVM:

   ![install-ubuntu-8](./images/install-ubuntu-8.png)

   ![install-ubuntu-9](./images/install-ubuntu-9.png)

   ![install-ubuntu-10](./images/install-ubuntu-10.png)

   Настройки пользователя, `hostname` - сетевое имя системы и пароля. Пароль `root` (пользователя с идентификатором (UID - user ID) `0` и имеющим неограниченные привилегии, аналог администратора, далее будем называть его `root`) не устанавливается. Задаем пароль только для своего основного пользователя. Настоятельно не советуем ставить свой настоящий сложный пароль на ВМ. После ввода его попросят еще раз для подтверждения:

   ![install-ubuntu-11](./images/install-ubuntu-11.png)

   Пропускаем рекламу:

   ![install-ubuntu-12](./images/install-ubuntu-12.png)

   Выбираем установить OpenSSH-сервер:

   ![install-ubuntu-13](./images/install-ubuntu-13.png)

   Пропускаем установку дополнительных пакетов:

   ![install-ubuntu-14](./images/install-ubuntu-14.png)

   Ждем завершения установки системы:

   ![install-ubuntu-15](./images/install-ubuntu-15.png)

   Подтверждаем изъятие диска:

   ![install-ubuntu-16](./images/install-ubuntu-16.png)

   ВМ "на логине". Пробуем войти своим пользователем. Если все введено верно, то вы увидите приглашение ввода команд (`command prompt`):

   ![install-ubuntu-17](./images/install-ubuntu-17.png)

   Если загружается снова установка, то проверьте в параметрах ВМ то, что диск извлечен:

   ![install-ubuntu-18](./images/install-ubuntu-18.png)

## Создание снимка

Делаем мгновенный снимок виртуальной машины, если ваша система виртуализации это поддерживает. Тогда в любой момент мы сможем вернуться на данное состояние системы, если что-то сломаем. В VB переходим во вкладку "Снимки" (Snapshots) и нажимаем "сделать". Названия не принципиальны.

:::note
Люди делятся на два типа:

- Еще не делают бэкапы;
- Уже делают бэкапы.
:::

![make-snapshot-1](./images/make-snapshot-1.png)

![make-snapshot-2](./images/make-snapshot-2.png)

![make-snapshot-3](./images/make-snapshot-3.png)

![make-snapshot-4](./images/make-snapshot-4.png)

Что-нибудь изменим в системе, например напишем пару команд и выключим ВМ. Теперь попробуем восстановить мгновенный снимок. Если все в полном порядке, вы откатитесь к состоянию ВМ на момент завершения установки виртуальной машины.

:::note
Люди, которые делают бэкапы, делятся на два типа:

- Еще не проверяют свои бэкапы после создания;
- Уже проверяют свои бэкапы после создания.
:::

![make-snapshot-5](./images/make-snapshot-5.png)

## Настройка сети

Посмотрите, какой IP адрес был получен в созданной нами NAT сети с помощью следующей команды:

```bash
ip a
```

![netplan-1](./images/netplan-1.png)

Установим статический адрес ВМ, чтобы при перезагрузке наша ВМ не получала от [DHCP](https://ru.wikipedia.org/wiki/DHCP) нашей сети случайны адрес из пула адресов.

Для это мы воспользуемся утилитой [Netplan](https://losst.pro/nastrojka-seti-netplan-v-ubuntu).

Все конфигурационные файлы Netplan находятся в папке `/etc/netplan/`. Во время запуска службы, она преобразовывает свою конфигурацию в конфигурацию той службы, которая будет управлять сетью и помещает её в каталог `/run/`. По умолчанию в Ubuntu есть только один конфигурационный файл. Его мы и откроем на редактирование:

```bash
sudo nano /etc/netplan/00-installer-config.yaml
```

Заменим его текущее содержимое следующим:

![netplan-2](./images/netplan-2.png)

В данном случае мы установим статический IP-адрес на сервере Ubuntu 22.04 на `10.0.5.5/24` со шлюзом по умолчанию `10.0.5.1` и DNS-серверами `10.0.5.1`. Подробнее о синтаксисе можете узнать [здесь](https://linuxconfig.org/how-to-configure-static-ip-address-on-ubuntu-22-04-jammy-jellyfish-desktop-server).

После того, как мы подправили мы должны сохранить изменения в файл. В текстовом редакторе [Nano](https://losst.pro/tekstovyj-redaktor-nano-v-linux-dlya-novichkov) нужно вызвать комбинацию `ctrl+x` и подтвердить то, что мы хотим сохранить изменения в файл.

Далее мы применим изменения Netplan с помощью команды:

```bash
sudo netplan apply
```

Если все прошло успешно, то `ip a` нам покажет, что мы имеет интересующий нас адрес:

![netplan-3](./images/netplan-3.png)

Проверим с помощью `ping ya.ru` то, что мы имеем выход в интернет:

![netplan-4](./images/netplan-4.png)

## Делаем доступным ssh

Модуль "system" [управляет службой SSH во всех последних дистрибутивах Ubuntu](https://www.ubuntu-server.com/tutorials/enable-ssh-on-ubuntu-22-04/). Таким образом, вы можете использовать команды "systemctl" для управления службой SSH.

Чтобы запустить службу SSH и добавить ее в автозапуск, используйте следующую команду:

```bash
sudo systemctl enable ssh
```

Аналогично, если вы хотите проверить, запущена ли служба ssh в вашей системе или нет. Вы также можете проверить состояние службы SSH, используя следующую команду:

```bash
sudo systemctl status ssh
```

![ssh-enable](./images/ssh-enable.png)

После включения SSH-сервера вы можете использовать его для инициирования удаленных подключений, а также принимать входящие запросы на подключение. Используйте следующую команду ssh для удаленного подключения SSH-сервера:

```bash
ssh <имя пользователя>@localhost -p 2222
```

Мы используем атрибут `-p 2222`, чтобы воспользоваться пробросом портов, который мы делали при настройки сети NAT VB.

При первом подключении от вас потребуется подтвердить, что вы хотите добавить виртуальную машину в известные хосты. Для этого введите `yes` на соответствующий запрос:

```bash
The authenticity of host '[localhost]:2222 ([127.0.0.1]:2222)' can't be established.
ED25519 key fingerprint is SHA256:oLDQlGjAow+wh2RDzTzts8EAQZ4iKAmZ958oSmt6QgY.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:2222' (ED25519) to the list of known hosts.
```

Если все получилось, то отобразится приглашение ввода команд:

![check-ssh](./images/check-ssh.png)
